#ifndef SYSTEMMATRIX_HPP
#define SYSTEMMATRIX_HPP

namespace Dynamic
{

struct TimedVoxels;
struct Timogram;

struct SystemMatrix {
	double* array;
public:
	SystemMatrix();
	SystemMatrix(const SystemMatrix& m);

	~SystemMatrix();

	void operator=(const SystemMatrix& m);

	double& at(unsigned int L, unsigned int V);

	void Init(bool twoGauss = true);

	void Zero();

	double sumByV(unsigned int voxelIndex);

	void randomize(int nsamples);

	void PositronRange();

	void project(TimedVoxels& x, Timogram& yMeasComp);

	void backProject(TimedVoxels& x, Timogram& yMeasComp);

	double Max();

	void PrintImage(const char* ofname, double maxvalue, bool bar);
};

}

#endif // SYSTEMMATRIX_HPP
